#include <head.h>

sem_t my_sem;


// 全局变量   计数
int con = 1;

// 每一秒钟 对数值进程一次加加
void * pthread_Func_1(void * arg)
{
    con = 0;
    while (1)
    {
        
        sleep(1);

        // P操作 --  >> 类似于互斥锁的上锁
        sem_wait(&my_sem);

        con++;

        // V操作
        sem_post(&my_sem);
        
    }
    

}

// 当计数值发生更改时 打印出来
void * pthread_Func_2(void * arg)
{
    int temp = con;
    
    
    while (1)
    {
        // P操作 --  >> 类似于互斥锁的上锁
        sem_wait(&my_sem);

        if (con == temp)
        {
            printf("con = %d\n" , con );
            temp++;
        }

        // V操作
        sem_post(&my_sem);


    }
    
}
int main(int argc, char const *argv[])
{
    // 初始化 信号量
    sem_init(&my_sem , 0 , 1);

    // 创建线程
    pthread_t tid_1 = 0;
    pthread_t tid_2 = 0;

    if(pthread_create(&tid_1 , NULL , pthread_Func_1 , NULL) != 0)
    {
        printf("线程创建失败\n");
        return 1;
    }
    
    if(pthread_create(&tid_2 , NULL , pthread_Func_2 , NULL) != 0)
    {
        printf("线程创建失败\n");
        return 1;
    }
    
    pthread_join(tid_1 , NULL);
    pthread_join(tid_2 , NULL);
    
    // 销毁信号量
    sem_destroy(&my_sem);
    return 0;
}

/*
停车场问题

假设 嵌入式干不下去了 干保安了
然后管的是停车场

    一次只运行停5辆车 但是外面有1000台车等着 没台车需要停 2 秒 请你用信号量的方式来模拟这个问题 


*/